package com.liu.io.file.pdf;

import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfWriter;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

/**
 * @author liubo
 */
public class PdfReport {

    /**
     * 创建文件，并通过IO流下载到指定目录
     *
     * @param filePath
     * @param generatePdf
     * @param pdfData
     * @param isPageEvent
     */
    public void createNewFile(String filePath, GeneratePdf generatePdf, List<List<String>> pdfData, boolean isPageEvent) {
        this.createNewFile(filePath, generatePdf, pdfData, null, null, null, null, null, null, isPageEvent);
    }

    /**
     * 创建文件，并通过IO流下载到指定目录
     *
     * @param filePath
     * @param generatePdf
     * @param pdfData
     */
    public void createNewFile(String filePath, GeneratePdf generatePdf, List<List<String>> pdfData) {
        this.createNewFile(filePath, generatePdf, pdfData, null, null, null, null, null, null, true);
    }

    /**
     * 创建文件，并通过IO流下载到指定目录
     *
     * @param filePath      文件路径
     * @param generatePdf
     * @param pdfData       导出数据
     * @param watermarkText 水印文字
     * @param title         标题
     * @param author        作者
     * @param subject       主题
     * @param keywords      关键字
     * @param creator       创建者
     * @param isPageEvent   是否有页眉/页脚
     */
    public void createNewFile(String filePath, GeneratePdf generatePdf, List<List<String>> pdfData, String watermarkText, String title, String author, String subject, String keywords, String creator, boolean isPageEvent) {
        Document document = null;
        try {
            // 1.新建document对象
            document = new Document(PageSize.A4);

            // 2.建立一个书写器(Writer)与document对象关联
            File file = new File(filePath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            file.createNewFile();
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
            // 水印
            writer.setPageEvent(new Watermark(watermarkText));
            // 页眉,页脚
            if (isPageEvent) {
                writer.setPageEvent(new HeaderFooter());
            }

            // 3.打开文档
            document.open();
            if (StringUtils.isNotEmpty(title)) {
                document.addTitle(title);
            }
            if (StringUtils.isNotEmpty(author)) {
                document.addAuthor(author);
            }
            if (StringUtils.isNotEmpty(subject)) {
                document.addSubject(subject);
            }
            if (StringUtils.isNotEmpty(keywords)) {
                document.addKeywords(keywords);
            }
            if (StringUtils.isNotEmpty(creator)) {
                document.addCreator(creator);
            }

            // 4.向文档中添加内容
            generatePdf.generatePdf(document, pdfData);

        }
        catch (Exception e) {
//            ExceptionHandler.publish("SPT-EXPORT-00010", null, ExceptionHandler.BUSS_ERROR);
        }
        finally {
            // 5.关闭文档
            document.close();
        }
    }
}

